package br.org.acessobrasil.portal.plugin;

import java.util.ArrayList;
import java.util.List;

import br.org.acessobrasil.portal.modelo.ItemBusca;
import br.org.acessobrasil.portal.persistencia.BuscaDaoSpring;
import br.org.acessobrasil.portal.template.Template;
import br.org.acessobrasil.portal.util.Link;
import br.org.acessobrasil.portal.vista.BuscaLink;

public class Busca extends SuperPlugin {

	@Override
	public String executa() {
		String txtBusca = requestString("txtBusca");
		if(txtBusca.equals("")){
			//
			return "";
		}
		Template template = new Template();
		template.setTemplate(this.template);
		//Coloca o valor de volta no input
		template.substituirAtributoTagId("input", "busca", "value", txtBusca);
		template.setRsItemCustomizado(new BuscaLink());
		List<ItemBusca> resultado = BuscaDaoSpring.getInstance().listarAchados(txtBusca);
		if(resultado.size()==0) {
			template.retirarArea("mensagem busca");
			template.retirarArea("paginacao");
			template.encaixaResultSet("Nenhuma p&aacute;gina encontrada.");
		}else {
			for(ItemBusca item :resultado) {
				item.setUrl("index.jsp"+item.getUrl());
			}
			
			int pagina =0;
			try {
				pagina = Integer.valueOf(request.getParameter("pagina"));
			} catch (Exception e) {
			}
			
			int c=1,rnPaginacao,total = resultado.size();
			int pageSize = 10;
			ArrayList<Link> listLink = new ArrayList<Link>();
			Link lnkAnterior = null;
			Link lnkProxima = null;
			Link atual = null;
			for(int i=0;i<total;i+=pageSize){
				rnPaginacao = i;
				Link t = new Link(c++,"?plugin=Busca&pagina="+rnPaginacao+"&txtBusca="+requestString("txtBusca"));
				if(pagina==rnPaginacao){
					atual=t;
					if(i>0){
						lnkAnterior = listLink.get(listLink.size()-1);
					}
				}else if(atual!=null && lnkProxima==null){
					lnkProxima=t;
				}
				listLink.add(t);
			}
			//caso so tenha uma p�gina retiramos a paginacao
			String mensagem = "Foram encontrados <b>"+total+"</b> resultados para o termo <b>"+requestString("txtBusca")+"</b>.";
			if(c<=2){
				try{
					template.retirarArea("anterior");
					template.retirarArea("paginas");
					template.retirarArea("proxima");
				}catch(Exception e){}
			}
			try{
				template.setArea("mensagem busca",mensagem);
			}catch(Exception e){}
			template.encaixaPaginacao(listLink, lnkAnterior, lnkProxima, atual);			
			template.encaixaResultSet(resultado,pagina,pagina+pageSize);
		}
		return template.getResultado();
	}
	
}
